﻿
//#include "pch.h"
#include "ngx_mem_pool.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>

typedef struct Data stData;
struct Data
{
    char* ptr;
    FILE* pfile;
};

void func1(void* p1)
{
    char* p = (char*)p1;
    printf("free ptr mem!\n");
    free(p);
}
void func2(void* pf1)
{
    FILE *pf = (FILE*)pf1;
    printf("close file!\n");
    fclose(pf);
}



int main()
{
    // 512 - sizeof(ngx_pool_t) 、 4095   =>   max
    ngx_mem_pool memPool(512);

    void* p1 = memPool.ngx_palloc(128); // 从小块内存池分配的
    if (p1 == nullptr)
    {
        printf("ngx_palloc 128 bytes fail...");
        return -1;
    }



    return 0;
}


// int main()
// {
//     // 512 - sizeof(ngx_pool_t) 、 4095   =>   max
//     ngx_mem_pool memPool(512);


//     void* p1 = memPool.ngx_palloc(128); // 从小块内存池分配的
//     if (p1 == nullptr)
//     {
//         printf("ngx_palloc 128 bytes fail...");
//         return -1;
//     }

//     stData* p2 = (stData*)memPool.ngx_palloc(512); // 从大块内存池分配的
//     if (p2 == nullptr)
//     {
//         printf("ngx_palloc 512 bytes fail...");
//         return 0;
//     }

//     do {
//         p2->ptr = (char*)malloc(12);
//     } while (p2->ptr == nullptr);
//     strcpy(p2->ptr, "hello world");
//     p2->pfile = fopen("data.txt", "w");

//     ngx_pool_cleanup_s* c1 = memPool.ngx_pool_cleanup_add(func1, sizeof(char*), p2->ptr);
//     ngx_pool_cleanup_s* c2 = memPool.ngx_pool_cleanup_add(func2, sizeof(FILE*), p2->pfile);

//     return 0;
// }


